<h1 id="the-book-of-ruby-small-class-h5-text-muted-huw-collingbourne-small-">The Book Of Ruby <small class="h5 text-muted">Huw Collingbourne</small></h1>
<hr>
<div class="text-center">

<p><img src="./images/book-of-ruby.jpg" alt="The Book of Ruby"></p>
</div>

<p>随着开源社区的兴盛，作为一名开发者，我们在日常工作和生活中接触的开源技术也越来越多，未来开源已成为趋势和潮流。其中，开源书籍也成为了提供给我们开发者学习的免费并且宝贵的资源。在此之前，很多开发者都将自己所感兴趣领域的开源书籍、文档翻译成了中文，分享给国内的开发者参考学习，这似乎也算是对开源社区的一部分贡献吧。</p>
<p>《The Book Of Ruby》是一本与 <strong>Ruby 语言</strong> 编程知识相关的开源书籍，市面上有这本书的纸质出版书（英文版），而且 Windows 平台下安装了 Ruby 语言之后，这本书的 pdf 文件（英文版）也会随 API 文档存放于 Ruby 根目录的 <code>doc/</code> 目录下（目前发现，在安装 Ruby 2.3 还是 2.4 版本之后不再附带该 pdf 文档）。</p>
<p>我与 Ruby 结缘也算是一种巧合，源于一个网络游戏。事实上之前我非常喜欢玩《梦幻西游》这款网易公司出品的经典网游，但是随着自己慢慢长大，尤其是进入大学之后，学业上的事情比较繁重，就没有精力再继续玩下去了。然而，《梦幻西游》是一代人的回忆，也是我青春中的一段美好经历，10 年后它依然在，玩家已经换了一批又一批，它也早都不是当年的模样了。</p>
<p>在我读高中期间，偶尔闲暇的时候会上网搜索一下有关《梦幻西游》的信息，一次偶然间发现了民间单机版梦幻西游，下载下来后感觉还不错，而且民间制作单机版网游的人还不少。后来在大学期间，又接触了一批新的梦幻西游单机游戏，这次明显比高中时候接触的那些质量要好得多。这一次，激发我的探索欲，我接触到了 66rpg 论坛和 RPG Maker XP 游戏制作工具，后来也尝试着自己修改 RPG Maker XP 的脚本代码，而这些脚本代码正是由 Ruby 编写的。</p>
<p>Ruby 可以说是除过大学课程里面的 C 语言以外，我接触到并且用来写了大量代码的第一个高级语言，当然后来我也喜欢上了这门语言。Ruby 是一门纯粹的面向对象的脚本语言，可能它的运行效率会慢一点，但它的开发效率是极高的（Ruby 时代提倡敏捷开发）。更重要的是，它的面向对象的编程思想和设计哲学非常值得热爱编程的开发者去学习和借鉴。</p>
<p>Ruby 在前几年因为 ROR（Ruby on Rails）在 Web 开发方面大放异彩，事实上 GitHub 平台就是基于 ROR 构建的。遗憾的是，Ruby 在国内一直不温不火，据说在国外还是比较火的，虽然 ROR 框架现在用的少了，但 Ruby 语言在很多方面还是能看到它的踪影的，例如前端 Sass 工具就是用 Ruby 写的。Ruby 的创造者是一名日本人，也是首个亚洲人创造的编程语言，可能是由于偏见以及诸多原因，让 Ruby 没能成为一门主流语言。但是，Ruby 是一个集合了诸多早期其它编程语言（Perl、Smalltalk、Lisp 等）优点的高级语言，其中的设计哲学有很多地方值得我们去学习和体会。</p>
<p>国内的大多数开发者也许还不了解 Ruby，据说用过 Ruby 的人大多数认为它是对程序员友好的，同时我个人也觉得官方的 API 文档做的也是非常的好，而且从 Ruby 中领略到的面向对象的思维以及元编程的技巧是对开发者充满诱惑的，所以我推荐大家去学习 Ruby，它也许是一个很不错的工具。</p>
<p>在国内 Ruby 的学习资料是稀缺的，事实上 Ruby 相比其它语言（Java、PHP、C++ 等）的英文学习资料也是很少的，但这并不代表人们不认可它，近些年来 Ruby 在全球编程语言排名中一直位居 10 位左右，表现还不错。《The Book Of Ruby》这本书的最新版出版时间距今（2016年）已经约有六、七年了，但它的参考价值仍然是巨大的，全书共二十章，400 多页。该书不是简单的讨论了 Ruby 的语法，而是作者（Huw Collingbourne）带领你步步深入到 Ruby 之中，了解它的核心思想。</p>
<p>因此，我打算将这本书翻译成中文版，一方面是给自己找个事情做，能从中了解到更多编程思想和设计哲学，也方便以后自己去查阅，毕竟中文对我来说还是阅览速度更快的；另一方面呢，将该项目放到 GitHub 平台上，如果国内有 Ruby 的开发者感兴趣可以作为参考，这也算是为开源社区做一点点贡献吧。</p>
<h2 id="-">目录概述</h2>
<p>全书共 20 章节，下面是每一章节的内容概要：</p>
<ul>
<li>第一章：字符串、数字、类和对象 - 获取输入和输出，字符串和内嵌表达式，数字和测试语句 if...then，局部变量和全局变量，类和对象，实例变量，消息、方法与多态性，构造方法与对象初始化，查看对象信息。</li>
<li>第二章：类的层次结构、属性与变量 - 超类与子类，访问器方法，属性读写，调用超类方法，类变量。</li>
<li>第三章：字符串和 Range - 字符串分隔符，字符串处理方法，Range，Range 迭代器。</li>
<li>第四章：数组与 Hash - 常用处理方法。</li>
<li>第五章：循环和迭代器 - for 循环，多参数迭代，代码块，while 循环，until 循环，loop 循环。</li>
<li>第六章：条件语句 - if...then...else，and...or...not，if...elsif，unless，case 语句，=== 方法，catch 与 throw。</li>
<li>第七章：方法 - 类方法，类变量，构造方法，单例方法，单例类，重写方法，public、private 和 protected 方法。</li>
<li>第八章：参数传递与返回值 - 实例方法，类方法，单例方法，返回值，返回多个值，默认参数和多参数，整数，进出原则，并行赋值，引用传值。</li>
<li>第九章：异常处理 - rescue，ensure，else，error 编号，retry，raise。</li>
<li>第十章：Block、Proc 和 Lambda - 匿名函数，proc 与 lambda，闭包，yield，嵌套块，优先级规则，块中实例变量，块中局部变量。</li>
<li>第十一章：符号 - 符号与字符串，符号和变量，为什么使用符号？</li>
<li>第十二章：模块和 mixin - 模块与类，模块方法，命名空间，包含模块，alias 方法，作用域解析符。</li>
<li>第十三章：文件与 IO - 打开和关闭文件，文件和目录，赋值文件，目录查询，递归，排序。</li>
<li>第十四章：Yaml - 转换成 yaml，嵌套序列，保存 yaml 数据，一个文件包含多个 yaml 文档，yaml 数据库。</li>
<li>第十五章：Marshal - 保存与加载数据，保存单例对象，yaml 与单例对象。</li>
<li>第十六章：正则表达式 - 匹配组，前后匹配，贪婪匹配，字符串方法，文件操作。</li>
<li>第十七章：线程 - 创建线程，运行线程，主线程，线程状态，线程优先级，主线程优先级，互斥。</li>
<li>第十八章：调试与测试 - irb、调试、单元测试、断言。</li>
<li>第十九章：Ruby On Rails - 安装 RoR、第一个 RoR 应用，创建控制器，创建视图，Rails 标记，MVC。</li>
<li>第二十章：动态编程 - 自修改程序，eval，动态添加变量和方法，运行时创建类，绑定，send，移除方法。</li>
</ul>
<h2 id="-">学习资料</h2>
<p>最后，我向大家推荐一些有关 Ruby 的学习资料。</p>
<ul>
<li>中文书籍<ul>
<li>《Ruby基础教程》，[日] 高桥征义 后藤裕藏，何文斯 译</li>
<li>《Ruby元编程》，[意] Paolo Perrotta，廖志刚 译</li>
</ul>
</li>
<li>中文论坛<ul>
<li><a href="http://ruby-china.org/" target="_blank">Ruby China</a></li>
</ul>
</li>
<li>Ruby 官网<ul>
<li><a href="http://www.ruby-lang.org/zh_cn/" target="_blank">Ruby</a></li>
</ul>
</li>
</ul>
